/**
 * 调起手机app，失败则打开下载页
 * 用于zymk的wap端用户导流向app
 * 语法：zyRiverScheme.doScheme({
 *        android: 安卓下载地址,
 *        ios: ios下载地址,
 *        scheme: 调用app的link
 *      }, '剪贴板内容')
 */
let Clipboard =require('clipboard')

/**
 * 打开iframe
 * @param {string} url
 */
let creatIframe = function (url) {
  // 移除之前iframe
  let oldIframe = document.getElementsByClassName('zy_river_scheme_iframe')
  if (oldIframe.length) {
    document.body.removeChild(oldIframe[0])
  }
  let ifr = document.createElement('iframe');
  ifr.style.display = 'none';
  ifr.src = url;
  ifr.className = 'zy_river_scheme_iframe'
  document.body.appendChild(ifr);
}


/**
 * 执行跳转操作
 * 一般先跳转scheme地址，在调用app无效的情况下执行替代跳转url
 * @param {object} urls 一系列跳转规则
 *       scheme: goto地址
 *       android: 安卓替代跳转方式 可选
 *       ios: ios替代跳转方式 可选
 * @param {string} text 往剪贴板写入的字符串 可选
 */
let doScheme = function (urls, text) {
  let opt = typeof urls === 'object' ? urls : {}
  let scheme = opt.scheme

  if (!scheme) {
    throw new Error('not find schemeUrl！')
  }
  // 执行剪贴板操作
  if (text) {
    if (typeof text !== 'string') {
      throw new Error('text must be string！')
    }
    new Clipboard('body', {
      text: function (trigger) {
        return text
      }
    })
  }

  let ua = navigator.userAgent.toLowerCase()
  if (ua.match(/(iPhone|iPod|iPad);?/i)) {
    window.location.href = opt.scheme // 打开app对应页面
    //由于部分ios中打开app后，WAP页面会被挂起，定时器不会被执行。因此可以做下优化：
    //WAP页重新被聚焦后，如果超过1s，认为APP被打开了，重新聚焦时就不必再跳转到APP下载页
    if (opt.ios || opt.android) {
      let startTime = Date.now();
      let delayTime = /safari/.test(ua) ? 3000 : 1000;
      let timer = setInterval(function () {
        if (Date.now() - startTime > delayTime) {
          clearInterval(timer);
          window.location.href = opt.ios || opt.android;
        }
      }, 25);
    }
  } else {
    // 更改andriod兼容两张方式打开
    creatIframe(opt.scheme);
    //跳转下载页
    setTimeout(function () {
      window.location.href = opt.android;
    }, 600);
  }
}
module.exports = { doScheme }

